package ledger

import "gorm.io/gorm"

type Branch struct {
	gorm.Model
	Value string `json:"value" toml:"value"`
	Title string `json:"title" toml:"title"`
	Note  string `json:"note" toml:"note"`
	// Offices []Office `json:"offices" toml:"offices"`
}

type Office struct {
	gorm.Model
	Value    string `json:"value" toml:"value"`
	Title    string `json:"title" toml:"title"`
	BranchID uint   `json:"branchid" toml:"branchid"`
	Note     string `json:"note" toml:"note"`
	Branch   Branch `json:"branch" gorm:"foreignkey:BranchID;AssociationForeignKey:BranchID"`
}

// 线路、公司、调度台 复用这个结构体
type Item struct {
	Value string `json:"value" toml:"value"`
	Title string `json:"title" toml:"title"`
	Note  string `json:"note" toml:"note"`
}

// 品牌&型号
type Spec struct {
	Value string  `json:"value" toml:"value"`
	Title string  `json:"title" toml:"title"`
	Board string  `json:"board" toml:"board"`
	CPU   string  `json:"cpu" toml:"cpu"`
	RAM   string  `json:"ram" toml:"ram"`
	ROM   string  `json:"rom" toml:"rom"`
	OS    string  `json:"os" toml:"os"`
	Price float64 `json:"price" toml:"price"`
	Code  string  `json:"code" toml:"code"`
	Note  string  `json:"note" toml:"note"`
}
type Brand struct {
	Value    string `json:"value" toml:"value"`
	Title    string `json:"title" toml:"title"`
	Children []Spec `json:"children" toml:"children"`
	Note     string `json:"note" toml:"note"`
}

// 类别和器材
type Product struct {
	Value  string `json:"value" toml:"value"`
	Title  string `json:"title" toml:"title"`
	Expire uint   `json:"expire" toml:"expire"` // 寿命周期，单位（月）
	Note   string `json:"note" toml:"note"`
}
type Collation struct {
	Value    string    `json:"value" toml:"value"`
	Title    string    `json:"title" toml:"title"`
	Children []Product `json:"children" toml:"children"`
	Note     string    `json:"note" toml:"note"`
}

type Static struct {
	// 下面这些存在批量更新的情况，需要以ID的形式保存
	/**
	如调度台更名、工区更名、车间更名、线路更名、资产公司更名重组
	*/
	Branchs []Branch `mapstructure:"branchs" json:"branch,omitempty" yaml:"branchs"`
	Offices []Office `mapstructure:"offices" json:"offices,omitempty" yaml:"offices"`
	Asserts []Item   `mapstructure:"asserts" json:"asserts,omitempty" yaml:"asserts"`
	Lines   []Item   `mapstructure:"lines" json:"lines,omitempty" yaml:"lines"`
	Desks   []Item   `mapstructure:"desks" json:"desks,omitempty" yaml:"desks"`

	// 后面这些不涉及批量更新，所以可以直接以字符串形式保存
	/**
	联锁类型更新只是真个某个站，其他情况类似
	*/
	// 属性字段、联锁类型、品牌、设备类别、器材分类、操作系统、串口卡、设备状态、控制模式、
	// CTC类别、列控类别、监测类型、车站类型
	Brands     []Brand     `mapstructure:"brands" json:"brands" yaml:"brands"`
	Collations []Collation `mapstructure:"collations" json:"collations" yaml:"collations"`
	// Categories []string `mapstructure:"categories" json:"categories" yaml:"categories"`

	States []string `mapstructure:"states" json:"states" yaml:"states"` // 车站状态
	Devtes []string `mapstructure:"devtes" json:"devtes" yaml:"devtes"` // 设备状态
	Modes  []string `mapstructure:"modes" json:"modes" yaml:"modes"`    // 控制模式
	STAs   []string `mapstructure:"stas" json:"stas" yaml:"stas"`       // 车站类型
	CBIs   []string `mapstructure:"cbis" json:"cbis" yaml:"cbis"`       // 联锁类型
	TDCs   []string `mapstructure:"tdcs" json:"tdcs" yaml:"tdcs"`       // 调度集中类型
	TCCs   []string `mapstructure:"tccs" json:"tccs" yaml:"tccs"`       // 列控类型
	CSMs   []string `mapstructure:"csms" json:"csms" yaml:"csms"`       // 监测类型
	STPs   []string `mapstructure:"stps" json:"stps" yaml:"stps"`       // 调车防护类型

	DWDs []string `json:"dwds" map:"dwds" gorm:"comment:电务段"`
	CWDs []string `json:"cwds" map:"cwds" gorm:"comment:车务段"`
	GWDs []string `json:"gwds" map:"gwds" gorm:"comment:工务段"`
	GDDs []string `json:"gdds" map:"gdds" gorm:"comment:供电段"`
	TXDs []string `json:"txds" map:"txds" gorm:"comment:通信段"`
}
